In conventional constant-velocity laser printers, once the print engine begins print a particular page, it becomes impossible to halt the movement of the sheet of print media without causing an error. For this reason, most conventional laser printers must accumulate all of the data required to generate an entire page to be printed before the print engine actually begins movement of a sheet of print media for that particular page. This typical situation is a "serial" system, since all of the print data must first be received at the printer, and then the physical printing process for that page can be initiated by the print engine.
It is possible to improve the performance of a laser printer by designing a constant-velocity printer that has a parallelized system, in which the print engine begins its task of printing a particular sheet of print media before all of the print data has been received at the printer for that same page. In other words, there are two processes occurring virtually simultaneously, the printing of the page and the receiving and processing of later portions of data for that same page. Of course, in non-stop constant-velocity print technologies (such as in laser printers) a parallelized printing system can result in a race condition. Since the paper begins to move before all the data is received, and since the paper cannot be slowed or stopped, a burden is placed on the communications link between the host computer and printer to deliver the data to the printer and arrange for it to be sent to the print engine before that data is consumed by the printhead. If the required data is not resident in the printer at the time it is to be consumed, a "link overrun" situation occurs, which is an error state.
One solution to this problem would be to develop a data transfer protocol that can deliver data to the printer faster than the data is consumed by the printhead. While this would solve the link overrun problem, it is not feasible for many systems. This would be particularly true for laser printers having a relatively low-power microprocessor in which the preferred mode of operation is to rasterize the print data at the host computer, and then transfer the print data in a bitmap format down to the printer. In this system, there will obviously be a large quantity of data that needs to be transferred from the host to the printer, and this will take some time even at a very high data transfer rate.
Another solution to the link overrun problem is to accept the fact that the communication link is slower than the rate of consumption by the printhead, but to first accumulate a certain amount of data into a buffer of the printer for each page to be printed, and then allow the print engine to start printing the page before the remaining print data for that page has been received at the printer. This will give the communications link a "head start" in its race with the printhead. To optimize such a system, the quantity of data to be buffered before starting the print engine becomes a very important criterion, because if an insufficient quantity of data has been buffered before starting the print engine, then the communications link between the host and printer will lose the race with the printhead. On the other hand, if the printer designer is too conservative, then a much larger buffer than optimal will be used before starting the print engine, thereby causing an inefficient use of the printer's rather limited RAM (Random Access Memory).
One such printer is described in U.S. Pat. No. 5,490,237 (by Zimmerman), which discloses a page printer that allowed the print engine to start printing a page before the entire page of print data has been received from its host computer. The Zimmerman printer has an I/O buffer that is used to hold some of the data for a particular page to be printed. When used in a "sleek mode" (where the host computer rasterizes the print data), the Zimmerman printer is able to start printing a particular page before the entire print data for that page has been received at the printer. Once placed in the sleek mode, the Zimmerman printer begins to accumulate print data into an I/O buffer which holds some of the data for this page that is about to be printed. Once a certain amount of print data has been accumulated in this buffer (when it exceeds a "threshold"), the print engine is instructed to start printing that page. The "threshold" is set by the host computer, by precalculating a table that is automatically accessed upon an initial system configuration that is performed by the host computer. The threshold is provided by the host computer as part of a data header that is sent to the printer along with the command to enter the sleek mode. This threshold value defines the amount of working I/O buffer that is to be allocated in the printer's RAM for use as an initial buffer to hold print data before the print engine is started. The Zimmerman printer's buffer threshold value is set by the host computer in accordance with the print speed of the laser print engine, the rate of data transfer from the host to the printer, and the resolution of the print engine for this document.
One major drawback of Zimmerman's system is that the host computer must first determine what the threshold value of the buffer size at the printer should be for each page to be printed, and then send that threshold data value to the printer in a data message at the beginning of new page. The printer itself is rather helpless to perform in a parallelized manner unless it receives this information from the host computer. The practical effect in this type of system is that host computer must know everything about the printer (including its printhead processing speed) it is sending print jobs to, and if a particular printer has been upgraded or replaced by a higher speed printer, then the efficiency of the system becomes much less than optimal, because the higher performance printer could be optimized at a much lower threshold value.
It would be a significant improvement to provide a printer that can decide for itself how much data should be buffered for a particular page to be printed, and then make its own decision as to when to start the print engine. This would alleviate some of the processing tasks that would otherwise have to be performed by the host computer, and would also eliminate any non-efficiencies that might otherwise crop up when a particular printer is upgraded or is replaced by a higher-performance device.